#ifndef REPRESENTATION_H
#define REPRESENTATION_H

#include <iostream>
#include <string>
#include <vector>
#include "filter.h"
#include "histogram.h"

class Representation : public Filter{
	public:
		Representation();
		Representation(Data *);
		~Representation();

        bool isBlackWhite() const;
        Data *boundaryFollowing();
        Data *chainCode(int, std::string *, std::string *, std::string *);
        std::vector< Point > splitting(int, std::string *);
        std::vector< Point > getAllPoints();
        void basicDescriptors(std::string *, std::string *, std::string *, std::string *, std::string *);
        void momentInvariantsDescriptors(std::string *, std::string *, std::string *, std::string *, std::string *, std::string *, std::string *);
        void histogramDescriptors(std::string *, std::string *, std::string *, std::string *, std::string *, std::string *);

    private:
        void splittingRecursive(int, std::vector< Point >, std::vector< Point > *, int, int);
        double moment(int, int);
        double centralMoment(int, int);
        double normalizedCentralMoment(int, int);
        double omega(int, int);
};

#endif

